import requests
import os
from dotenv import load_dotenv
from typing import Dict, Optional

# 加载环境变量
load_dotenv()

class ZaoBaoAPI:
    def __init__(self):
        self.base_url = "https://v3.alapi.cn/api/zaobao"
        self.token = os.getenv("ALAPI_TOKEN")  # 从环境变量获取token
        
        if not self.token:
            raise ValueError("ALAPI_TOKEN 未在环境变量中配置")

    def get_daily_news(
        self, 
    ) -> Dict:
        """
        获取每日早报数据
        参数：
        - date: 可选日期（格式：YYYYMMDD），默认当天
        - timeout: 请求超时时间（秒）
        
        返回：
        - 包含结果的字典
        """
        headers = {"Content-Type": "application/json"}
        payload = {
            "token": self.token,
            "format": "json"
        }
        try:
            response = requests.post(
                self.base_url,
                json=payload,
                headers=headers
            )
            response.raise_for_status()  # 检查HTTP错误
            data = response.json()

            # 解析API返回状态
            if data.get("code") != 200:
                return {
                    "error": True,
                    "message": f"API错误: {data.get('msg', '未知错误')}",
                    "code": data.get("code")
                }

            # 返回标准化结果
            return {
                "data": data.get("data", {}),
            }

        except requests.exceptions.RequestException as e:
            return {
                "error": True,
                "message": f"请求异常: {str(e)}",
                "code": 500
            }
        except json.JSONDecodeError:
            return {
                "error": True,
                "message": "响应解析失败",
                "code": 500
            }

# 使用示例
if __name__ == "__main__":
    try:
        # 初始化API客户端
        zb = ZaoBaoAPI()
        
        # 获取今日早报
        result = zb.get_daily_news()
        
        if result["error"]:
            print(f"请求失败: {result['message']}")
        else:
            print(result)
            
    except ValueError as e:
        print(f"配置错误: {str(e)}")